<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/linux/linux-3.13/arch/x86/include/asm/desc_defs.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/linux/linux-3.13/arch/x86/include/asm/desc_defs.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="True">       1:</span> <span class="k">/* Written 2000 by Andi Kleen */</span>
<a name="2" /><span class="True">       2:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_noref.html#_X0FTTV9YODZfREVTQ19ERUZTX0hfMA__"><span class="b">_ASM_X86_DESC_DEFS_H</span></a>
<a name="3" /><span class="True">       3:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X0FTTV9YODZfREVTQ19ERUZTX0hfMA__"><span class="b">_ASM_X86_DESC_DEFS_H</span></a>
<a name="4" /><span class="True">       4:</span> 
<a name="5" /><span class="True">       5:</span> <span class="k">/*</span>
<a name="6" /><span class="True">       6:</span> <span class="k"> * Segment descriptor structure definitions, usable from both x86_64 and i386</span>
<a name="7" /><span class="True">       7:</span> <span class="k"> * archs.</span>
<a name="8" /><span class="True">       8:</span> <span class="k"> */</span>
<a name="9" /><span class="True">       9:</span> 
<a name="10" /><span class="True">      10:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">__ASSEMBLY__</span>
<a name="11" /><span class="True">      11:</span> 
<a name="12" /><span class="True">      12:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">types</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="13" /><span class="True">      13:</span> 
<a name="14" /><span class="True">      14:</span> <span class="k">/*</span>
<a name="15" /><span class="True">      15:</span> <span class="k"> * FIXME: Accessing the desc_struct through its fields is more elegant,</span>
<a name="16" /><span class="True">      16:</span> <span class="k"> * and should be the one valid thing to do. However, a lot of open code</span>
<a name="17" /><span class="True">      17:</span> <span class="k"> * still touches the a and b accessors, and doing this allow us to do it</span>
<a name="18" /><span class="True">      18:</span> <span class="k"> * incrementally. We keep the signature as a struct, rather than an union,</span>
<a name="19" /><span class="True">      19:</span> <span class="k"> * so we can get rid of it transparently in the future -- glommer</span>
<a name="20" /><span class="True">      20:</span> <span class="k"> */</span>
<a name="21" /><span class="True">      21:</span> <span class="k">/* 8 byte segment descriptor */</span>
<a name="22" /><span class="True">      22:</span> <span class="m">struct</span> <span class="b">desc_struct</span> <span class="f">{</span>
<a name="23" /><span class="True">      23:</span>     <span class="m">union</span> <span class="f">{</span>
<a name="24" /><span class="True">      24:</span>         <span class="m">struct</span> <span class="f">{</span>
<a name="25" /><span class="True">      25:</span>             <span class="m">unsigned</span> <span class="m">int</span> <span class="b">a</span><span class="f">;</span>
<a name="26" /><span class="True">      26:</span>             <span class="m">unsigned</span> <span class="m">int</span> <span class="b">b</span><span class="f">;</span>
<a name="27" /><span class="True">      27:</span>         <span class="f">}</span><span class="f">;</span>
<a name="28" /><span class="True">      28:</span>         <span class="m">struct</span> <span class="f">{</span>
<a name="29" /><span class="True">      29:</span>             <span class="b">u16</span> <span class="b">limit0</span><span class="f">;</span>
<a name="30" /><span class="True">      30:</span>             <span class="b">u16</span> <span class="b">base0</span><span class="f">;</span>
<a name="31" /><span class="True">      31:</span>             <span class="m">unsigned</span> <span class="b">base1</span><span class="f">:</span> <span class="c">8</span><span class="f">,</span> <span class="b">type</span><span class="f">:</span> <span class="c">4</span><span class="f">,</span> <span class="b">s</span><span class="f">:</span> <span class="c">1</span><span class="f">,</span> <span class="b">dpl</span><span class="f">:</span> <span class="c">2</span><span class="f">,</span> <span class="b">p</span><span class="f">:</span> <span class="c">1</span><span class="f">;</span>
<a name="32" /><span class="True">      32:</span>             <span class="m">unsigned</span> <span class="b">limit</span><span class="f">:</span> <span class="c">4</span><span class="f">,</span> <span class="b">avl</span><span class="f">:</span> <span class="c">1</span><span class="f">,</span> <span class="b">l</span><span class="f">:</span> <span class="c">1</span><span class="f">,</span> <span class="b">d</span><span class="f">:</span> <span class="c">1</span><span class="f">,</span> <span class="b">g</span><span class="f">:</span> <span class="c">1</span><span class="f">,</span> <span class="b">base2</span><span class="f">:</span> <span class="c">8</span><span class="f">;</span>
<a name="33" /><span class="True">      33:</span>         <span class="f">}</span><span class="f">;</span>
<a name="34" /><span class="True">      34:</span>     <span class="f">}</span><span class="f">;</span>
<a name="35" /><span class="True">      35:</span> <span class="f">}</span> <span class="b">__attribute__</span><span class="f">(</span><span class="f">(</span><span class="b">packed</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="36" /><span class="True">      36:</span> 
<a name="37" /><span class="True">      37:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_R0RUX0VOVFJZX0lOSVRfMA__"><span class="b">GDT_ENTRY_INIT</span></a><span class="f">(</span><span class="b">flags</span><span class="f">,</span> <span class="b">base</span><span class="f">,</span> <span class="b">limit</span><span class="f">)</span> <span class="f">{</span> <span class="f">{</span> <span class="f">{</span> \
<a name="38" /><span class="True">      38:</span>         <span class="f">.</span><span class="b">a</span> <span class="f">=</span> <span class="f">(</span><span class="f">(</span><span class="b">limit</span><span class="f">)</span> <span class="f">&amp;</span> <span class="c">0xffff</span><span class="f">)</span> <span class="f">|</span> <span class="f">(</span><span class="f">(</span><span class="f">(</span><span class="b">base</span><span class="f">)</span> <span class="f">&amp;</span> <span class="c">0xffff</span><span class="f">)</span> <span class="f">&lt;&lt;</span> <span class="c">16</span><span class="f">)</span><span class="f">,</span> \
<a name="39" /><span class="True">      39:</span>         <span class="f">.</span><span class="b">b</span> <span class="f">=</span> <span class="f">(</span><span class="f">(</span><span class="f">(</span><span class="b">base</span><span class="f">)</span> <span class="f">&amp;</span> <span class="c">0xff0000</span><span class="f">)</span> <span class="f">&gt;&gt;</span> <span class="c">16</span><span class="f">)</span> <span class="f">|</span> <span class="f">(</span><span class="f">(</span><span class="f">(</span><span class="b">flags</span><span class="f">)</span> <span class="f">&amp;</span> <span class="c">0xf0ff</span><span class="f">)</span> <span class="f">&lt;&lt;</span> <span class="c">8</span><span class="f">)</span> <span class="f">|</span> \
<a name="40" /><span class="True">      40:</span>             <span class="f">(</span><span class="f">(</span><span class="b">limit</span><span class="f">)</span> <span class="f">&amp;</span> <span class="c">0xf0000</span><span class="f">)</span> <span class="f">|</span> <span class="f">(</span><span class="f">(</span><span class="b">base</span><span class="f">)</span> <span class="f">&amp;</span> <span class="c">0xff000000</span><span class="f">)</span><span class="f">,</span> \
<a name="41" /><span class="True">      41:</span>     <span class="f">}</span> <span class="f">}</span> <span class="f">}</span>
<a name="42" /><span class="True">      42:</span> 
<a name="43" /><span class="True">      43:</span> <span class="m">enum</span> <span class="f">{</span>
<a name="44" /><span class="True">      44:</span>     <span class="b">GATE_INTERRUPT</span> <span class="f">=</span> <span class="c">0xE</span><span class="f">,</span>
<a name="45" /><span class="True">      45:</span>     <span class="b">GATE_TRAP</span> <span class="f">=</span> <span class="c">0xF</span><span class="f">,</span>
<a name="46" /><span class="True">      46:</span>     <span class="b">GATE_CALL</span> <span class="f">=</span> <span class="c">0xC</span><span class="f">,</span>
<a name="47" /><span class="True">      47:</span>     <span class="b">GATE_TASK</span> <span class="f">=</span> <span class="c">0x5</span><span class="f">,</span>
<a name="48" /><span class="True">      48:</span> <span class="f">}</span><span class="f">;</span>
<a name="49" /><span class="True">      49:</span> 
<a name="50" /><span class="True">      50:</span> <span class="k">/* 16byte gate */</span>
<a name="51" /><span class="True">      51:</span> <span class="m">struct</span> <span class="b">gate_struct64</span> <span class="f">{</span>
<a name="52" /><span class="True">      52:</span>     <span class="b">u16</span> <span class="b">offset_low</span><span class="f">;</span>
<a name="53" /><span class="True">      53:</span>     <span class="b">u16</span> <span class="b">segment</span><span class="f">;</span>
<a name="54" /><span class="True">      54:</span>     <span class="m">unsigned</span> <span class="b">ist</span> <span class="f">:</span> <span class="c">3</span><span class="f">,</span> <span class="b">zero0</span> <span class="f">:</span> <span class="c">5</span><span class="f">,</span> <span class="b">type</span> <span class="f">:</span> <span class="c">5</span><span class="f">,</span> <span class="b">dpl</span> <span class="f">:</span> <span class="c">2</span><span class="f">,</span> <span class="b">p</span> <span class="f">:</span> <span class="c">1</span><span class="f">;</span>
<a name="55" /><span class="True">      55:</span>     <span class="b">u16</span> <span class="b">offset_middle</span><span class="f">;</span>
<a name="56" /><span class="True">      56:</span>     <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">offset_high</span><span class="f">;</span>
<a name="57" /><span class="True">      57:</span>     <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">zero1</span><span class="f">;</span>
<a name="58" /><span class="True">      58:</span> <span class="f">}</span> <span class="b">__attribute__</span><span class="f">(</span><span class="f">(</span><span class="b">packed</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="59" /><span class="True">      59:</span> 
<a name="60" /><span class="True">      60:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UFRSX0xPV18w"><span class="b">PTR_LOW</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span> <span class="f">(</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="m">long</span><span class="f">)</span><span class="f">(</span><span class="b">x</span><span class="f">)</span> <span class="f">&amp;</span> <span class="c">0xFFFF</span><span class="f">)</span>
<a name="61" /><span class="True">      61:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UFRSX01JRERMRV8w"><span class="b">PTR_MIDDLE</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span> <span class="f">(</span><span class="f">(</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="m">long</span><span class="f">)</span><span class="f">(</span><span class="b">x</span><span class="f">)</span> <span class="f">&gt;&gt;</span> <span class="c">16</span><span class="f">)</span> <span class="f">&amp;</span> <span class="c">0xFFFF</span><span class="f">)</span>
<a name="62" /><span class="True">      62:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_UFRSX0hJR0hfMA__"><span class="b">PTR_HIGH</span></a><span class="f">(</span><span class="b">x</span><span class="f">)</span> <span class="f">(</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span> <span class="m">long</span><span class="f">)</span><span class="f">(</span><span class="b">x</span><span class="f">)</span> <span class="f">&gt;&gt;</span> <span class="c">32</span><span class="f">)</span>
<a name="63" /><span class="True">      63:</span> 
<a name="64" /><span class="True">      64:</span> <span class="m">enum</span> <span class="f">{</span>
<a name="65" /><span class="True">      65:</span>     <span class="b">DESC_TSS</span> <span class="f">=</span> <span class="c">0x9</span><span class="f">,</span>
<a name="66" /><span class="True">      66:</span>     <span class="b">DESC_LDT</span> <span class="f">=</span> <span class="c">0x2</span><span class="f">,</span>
<a name="67" /><span class="True">      67:</span>     <span class="b">DESCTYPE_S</span> <span class="f">=</span> <span class="c">0x10</span><span class="f">,</span>    <span class="k">/* !system */</span>
<a name="68" /><span class="True">      68:</span> <span class="f">}</span><span class="f">;</span>
<a name="69" /><span class="True">      69:</span> 
<a name="70" /><span class="True">      70:</span> <span class="k">/* LDT or TSS descriptor in the GDT. 16 bytes. */</span>
<a name="71" /><span class="True">      71:</span> <span class="m">struct</span> <span class="b">ldttss_desc64</span> <span class="f">{</span>
<a name="72" /><span class="True">      72:</span>     <span class="b">u16</span> <span class="b">limit0</span><span class="f">;</span>
<a name="73" /><span class="True">      73:</span>     <span class="b">u16</span> <span class="b">base0</span><span class="f">;</span>
<a name="74" /><span class="True">      74:</span>     <span class="m">unsigned</span> <span class="b">base1</span> <span class="f">:</span> <span class="c">8</span><span class="f">,</span> <span class="b">type</span> <span class="f">:</span> <span class="c">5</span><span class="f">,</span> <span class="b">dpl</span> <span class="f">:</span> <span class="c">2</span><span class="f">,</span> <span class="b">p</span> <span class="f">:</span> <span class="c">1</span><span class="f">;</span>
<a name="75" /><span class="True">      75:</span>     <span class="m">unsigned</span> <span class="b">limit1</span> <span class="f">:</span> <span class="c">4</span><span class="f">,</span> <span class="b">zero0</span> <span class="f">:</span> <span class="c">3</span><span class="f">,</span> <span class="b">g</span> <span class="f">:</span> <span class="c">1</span><span class="f">,</span> <span class="b">base2</span> <span class="f">:</span> <span class="c">8</span><span class="f">;</span>
<a name="76" /><span class="True">      76:</span>     <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">base3</span><span class="f">;</span>
<a name="77" /><span class="True">      77:</span>     <a href="cpu.c_macros_ref.html#_dTMyXzA_"><span class="b">u32</span></a> <span class="b">zero1</span><span class="f">;</span>
<a name="78" /><span class="True">      78:</span> <span class="f">}</span> <span class="b">__attribute__</span><span class="f">(</span><span class="f">(</span><span class="b">packed</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>
<a name="79" /><span class="True">      79:</span> 
<a name="80" /><span class="True">      80:</span> <span class="f">#</span><span class="n">ifdef</span> <a href="cpu.c_macros_ref.html#_Q09ORklHX1g4Nl82NF8w"><span class="b">CONFIG_X86_64</span></a>
<a name="81" /><span class="True">      81:</span> <span class="m">typedef</span> <span class="m">struct</span> <span class="b">gate_struct64</span> <span class="b">gate_desc</span><span class="f">;</span>
<a name="82" /><span class="True">      82:</span> <span class="m">typedef</span> <span class="m">struct</span> <span class="b">ldttss_desc64</span> <span class="b">ldt_desc</span><span class="f">;</span>
<a name="83" /><span class="True">      83:</span> <span class="m">typedef</span> <span class="m">struct</span> <span class="b">ldttss_desc64</span> <span class="b">tss_desc</span><span class="f">;</span>
<a name="84" /><span class="True">      84:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_Z2F0ZV9vZmZzZXRfMA__"><span class="b">gate_offset</span></a><span class="f">(</span><span class="b">g</span><span class="f">)</span> <span class="f">(</span><span class="f">(</span><span class="b">g</span><span class="f">)</span><span class="f">.</span><span class="b">offset_low</span> <span class="f">|</span> <span class="f">(</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span><span class="f">)</span><span class="f">(</span><span class="b">g</span><span class="f">)</span><span class="f">.</span><span class="b">offset_middle</span> <span class="f">&lt;&lt;</span> <span class="c">16</span><span class="f">)</span> <span class="f">|</span> <span class="f">(</span><span class="f">(</span><span class="m">unsigned</span> <span class="m">long</span><span class="f">)</span><span class="f">(</span><span class="b">g</span><span class="f">)</span><span class="f">.</span><span class="b">offset_high</span> <span class="f">&lt;&lt;</span> <span class="c">32</span><span class="f">)</span><span class="f">)</span>
<a name="85" /><span class="True">      85:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_Z2F0ZV9zZWdtZW50XzA_"><span class="b">gate_segment</span></a><span class="f">(</span><span class="b">g</span><span class="f">)</span> <span class="f">(</span><span class="f">(</span><span class="b">g</span><span class="f">)</span><span class="f">.</span><span class="b">segment</span><span class="f">)</span>
<a name="86" /><span class="False">      86:</span> <span class="f">#</span><span class="n">else</span>
<a name="87" /><span class="False">      87:</span> <span class="m">typedef</span> <span class="m">struct</span> <span class="b">desc_struct</span> <span class="b">gate_desc</span><span class="f">;</span>
<a name="88" /><span class="False">      88:</span> <span class="m">typedef</span> <span class="m">struct</span> <span class="b">desc_struct</span> <span class="b">ldt_desc</span><span class="f">;</span>
<a name="89" /><span class="False">      89:</span> <span class="m">typedef</span> <span class="m">struct</span> <span class="b">desc_struct</span> <span class="b">tss_desc</span><span class="f">;</span>
<a name="90" /><span class="False">      90:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_Z2F0ZV9vZmZzZXRfMA__"><span class="b">gate_offset</span></a><span class="f">(</span><span class="b">g</span><span class="f">)</span>        <span class="f">(</span><span class="f">(</span><span class="f">(</span><span class="b">g</span><span class="f">)</span><span class="f">.</span><span class="b">b</span> <span class="f">&amp;</span> <span class="c">0xffff0000</span><span class="f">)</span> <span class="f">|</span> <span class="f">(</span><span class="f">(</span><span class="b">g</span><span class="f">)</span><span class="f">.</span><span class="b">a</span> <span class="f">&amp;</span> <span class="c">0x0000ffff</span><span class="f">)</span><span class="f">)</span>
<a name="91" /><span class="False">      91:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_Z2F0ZV9zZWdtZW50XzA_"><span class="b">gate_segment</span></a><span class="f">(</span><span class="b">g</span><span class="f">)</span>        <span class="f">(</span><span class="f">(</span><span class="b">g</span><span class="f">)</span><span class="f">.</span><span class="b">a</span> <span class="f">&gt;&gt;</span> <span class="c">16</span><span class="f">)</span>
<a name="92" /><span class="True">      92:</span> <span class="f">#</span><span class="n">endif</span>
<a name="93" /><span class="True">      93:</span> 
<a name="94" /><span class="True">      94:</span> <span class="m">struct</span> <span class="b">desc_ptr</span> <span class="f">{</span>
<a name="95" /><span class="True">      95:</span>     <span class="m">unsigned</span> <span class="m">short</span> <span class="b">size</span><span class="f">;</span>
<a name="96" /><span class="True">      96:</span>     <span class="m">unsigned</span> <span class="m">long</span> <span class="b">address</span><span class="f">;</span>
<a name="97" /><span class="True">      97:</span> <span class="f">}</span> <span class="b">__attribute__</span><span class="f">(</span><span class="f">(</span><span class="b">packed</span><span class="f">)</span><span class="f">)</span> <span class="f">;</span>
<a name="98" /><span class="True">      98:</span> 
<a name="99" /><span class="True">      99:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* !__ASSEMBLY__ */</span>
<a name="100" /><span class="True">     100:</span> 
<a name="101" /><span class="True">     101:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* _ASM_X86_DESC_DEFS_H */</span>
<a name="102" /><span class="True">     102:</span> </pre>
  </body>
</html>
